View Javadoc

1   /***
2    * @version $Revision: 1.3 $
3    */
4   package uba.db.sql.interpreter;
5   
6   import uba.db.Database;
7   import uba.db.ar.Tupla;
8   import uba.db.ar.TuplaDef;
9   import uba.db.sql.language.Sentence;
10  
11  public class QueryPlanner {
12  	private Sentence sentence;
13  
14  	private SentenceQueryPlan queryPlanToUse;
15  
16  	private Database database;
17  
18  	/***
19  	 * Genera el plan de ejecución si la sentencia es válida semánticamente (las
20  	 * tablas existen, etc).
21  	 * 
22  	 * @param sqlSentence
23  	 *            El select a ejecutar.
24  	 * @param database
25  	 *            TODO
26  	 */
27  	public QueryPlanner(Database database) {
28  		this.database = database;
29  		queryPlanToUse = new NullQueryPlan();
30  	}
31  
32  	public void execute(Sentence sqlSentence) {
33  		queryPlanToUse = new NullQueryPlan();
34  		sentence = sqlSentence;
35  		SentenceTypeVisitor typeVisitor = new SentenceTypeVisitor(this,
36  				database);
37  		sentence.accept(typeVisitor);
38  		queryPlanToUse.startExecution();
39  	}
40  
41  	public void queryPlanToUse(SentenceQueryPlan sentencePlan) {
42  		queryPlanToUse = sentencePlan;
43  	}
44  
45  	public boolean hasMoreResults() {
46  		return queryPlanToUse.hasMoreResults();
47  	}
48  
49  	public Tupla nextTuple() {
50  		return queryPlanToUse.nextTuple();
51  	}
52  
53  	public String currentPlan() {
54  		return queryPlanToUse.planDetail();
55  	}
56  
57  	public TuplaDef currentTuplaDefinition() {
58  		return queryPlanToUse.tuplaDefinition();
59  	}
60  }